/*
 * ArchivosDePrueba.cpp
 *
 *  Created on: 18/09/2010
 *      Author:
 */

#include "ArchivosDePrueba.h"
#include "ArchivoRelativo.h"
#include "EntidadSerializable.h"

#include <iostream>
#include <iomanip>
#include <string>
#include <stdlib.h>
using std::setw;
using std::cout;
using std::endl;
using std::left;
using std::cin;
using namespace std;

// Funcion que crea archivos para probarlos
ArchivosDePrueba::ArchivosDePrueba()
{
	/*
	 * El dataset a crear es el siguiente
	 *
	 * Peliculas (con sus ID):
	 * 		1 - Ultimo tango en paris
	 * 		2 - Carancho
	 * 		4 - The Brown Bunny
	 * 		7 - Tetro
	 * 		12 - El mismo amor, la misma lluvia
	 *
	 * Personas (con sus ID):
	 * 		1 - Marlon Brando (actor)
	 * 		2 - Bernardo Bertolucci (director)
	 * 		3 - Maria Schneider (actor)
	 * 		4 - Franco Arcalli (escritor)
	 * 		5 - Ricardo Darín (actor)
	 * 		6 - Pablo Trapero (director)
	 * 		7 - Martina Gusman (actor)
	 * 		8 - Darío Valenzuela (actor)
	 * 		9 - Vincent Gallo (actor, director y escritor)
	 * 		10 - Chloë Sevigny (actor)
	 * 		11 - Cheryl Tiegs (actor)
	 * 		12 - Elizabeth Blake (actor)
	 * 		13 - Francis Ford Coppola (director y escritor)
	 * 		14 - Alden Ehrenreich (actor)
	 * 		15 - Maribel Verdú (actor)
	 * 		16 - Silvia Pérez (actor)
	 * 		17 - Rodrigo De la Serna (actor)
	 * 		18 - Mike Amigorena (actor)
	 * 		19 - Juan José Campanella (director)
	 *
	 */

	unsigned int maxPeliculas = 15;
	unsigned int maxPersonas = 20;

	int res; // Para chequear los accesos al archivo.


	/* ARCHIVO DE PELICULAS */

	ArchivoRelativo archivoPeliculas( "archivoPeliculas.dat" , maxPeliculas );
	res = archivoPeliculas.crear();
	res = archivoPeliculas.abrir();

	EntidadSerializable peliculaUltim( 1 , "Ultimo tango en paris" );
	peliculaUltim.agregarAsociado(1);
	peliculaUltim.agregarAsociado(2);
	peliculaUltim.agregarAsociado(3);
	peliculaUltim.agregarAsociado(4);
	res = archivoPeliculas.escribir(peliculaUltim);

	EntidadSerializable peliculaCar( 2 , "Carancho" );
	peliculaCar.agregarAsociado(5);
	peliculaCar.agregarAsociado(6);
	peliculaCar.agregarAsociado(7);
	peliculaCar.agregarAsociado(8);
	res = archivoPeliculas.escribir(peliculaCar);

	EntidadSerializable peliculaBun( 4 , "The Brown Bunny" );
	peliculaBun.agregarAsociado(3);
	peliculaBun.agregarAsociado(9);
	peliculaBun.agregarAsociado(10);
	peliculaBun.agregarAsociado(11);
	peliculaBun.agregarAsociado(12);
	res = archivoPeliculas.escribir(peliculaBun);

	EntidadSerializable peliculaTet( 7 , "Tetro" );
	peliculaTet.agregarAsociado(9);
	peliculaTet.agregarAsociado(13);
	peliculaTet.agregarAsociado(14);
	peliculaTet.agregarAsociado(15);
	peliculaTet.agregarAsociado(16);
	peliculaTet.agregarAsociado(17);
	peliculaTet.agregarAsociado(18);
	res = archivoPeliculas.escribir(peliculaTet);

	EntidadSerializable peliculaMism( 12 , "El mismo amor, la misma lluvia" );
	peliculaMism.agregarAsociado(5);
	peliculaMism.agregarAsociado(17);
	peliculaMism.agregarAsociado(19);
	res = archivoPeliculas.escribir(peliculaMism);

	// Imprime
	cout << "A continuación se imprime el archivo de peliculas." << endl;
	cout << left << setw(5) << "ID" << setw(20) << "Titulo" << endl;
	cout << endl;
	unsigned int i, id;
	EntidadSerializable otra;
	vector<int> unVec;
	for ( id = 1 ; id <= maxPeliculas ; id++ )
	{
		otra = archivoPeliculas.leer(id);
		cout << left << setw(5) << otra.getID() << setw(20) << otra.getRotulo();

		cout << "[";
		unVec = otra.getAsociados();
		for (i = 0 ; i < unVec.size() ; i++ )
		{
			cout << unVec.at(i) << " ";
		}
		cout << "]" << endl;
	}

	res = archivoPeliculas.cerrar();

	/* ARCHIVO DE PERSONAS */

	ArchivoRelativo archivoPersonas( "archivoPersonas.dat" , maxPersonas );
	res = archivoPersonas.crear();
	res = archivoPersonas.abrir();

	EntidadSerializable personaUno( 1 , "Marlon Brando (actor)" );
	personaUno.agregarAsociado(1);
	res = archivoPersonas.escribir(personaUno);

	EntidadSerializable personaDos( 2 , "Bernardo Bertolucci (director)" );
	personaDos.agregarAsociado(1);
	res = archivoPersonas.escribir(personaDos);

	EntidadSerializable persona3( 3 , "Maria Schneider (actor)" );
	persona3.agregarAsociado(1);
	persona3.agregarAsociado(4);
	res = archivoPersonas.escribir(persona3);

	EntidadSerializable persona4( 4 , "Franco Arcalli (escritor)" );
	persona4.agregarAsociado(1);
	res = archivoPersonas.escribir(persona4);

	EntidadSerializable persona5( 5 , "Ricardo Darín (actor)" );
	persona5.agregarAsociado(2);
	persona5.agregarAsociado(12);
	res = archivoPersonas.escribir(persona5);

	EntidadSerializable persona6( 6 , "Pablo Trapero (director)" );
	persona6.agregarAsociado(2);
	res = archivoPersonas.escribir(persona6);

	EntidadSerializable persona7( 7 , "Martina Gusman (actor)" );
	persona7.agregarAsociado(2);
	res = archivoPersonas.escribir(persona7);

	EntidadSerializable persona8( 8 , "Darío Valenzuela (actor)" );
	persona8.agregarAsociado(2);
	res = archivoPersonas.escribir(persona8);

	EntidadSerializable personaNueve( 9 , "Vincent Gallo (act, dir y ecr)" );
	personaNueve.agregarAsociado(4);
	personaNueve.agregarAsociado(7);
	res = archivoPersonas.escribir(personaNueve);

	EntidadSerializable personaDiez( 10 , "Chloë Sevigny (actor)" );
	personaDiez.agregarAsociado(4);
	res = archivoPersonas.escribir(personaDiez);

	EntidadSerializable persona11( 11 , "Cheryl Tiegs (actor)" );
	persona11.agregarAsociado(4);
	res = archivoPersonas.escribir(persona11);

	EntidadSerializable persona12( 12 , "Elizabeth Blake (actor)" );
	persona12.agregarAsociado(4);
	res = archivoPersonas.escribir(persona12);

	EntidadSerializable persona13( 13 , "Francis Ford Coppola (director y escritor)" );
	persona13.agregarAsociado(7);
	res = archivoPersonas.escribir(persona13);

	EntidadSerializable persona14( 14 , "Alden Ehrenreich (actor)" );
	persona14.agregarAsociado(7);
	res = archivoPersonas.escribir(persona14);

	EntidadSerializable persona15( 15 , "Maribel Verdú (actor)" );
	persona15.agregarAsociado(7);
	res = archivoPersonas.escribir(persona15);

	EntidadSerializable persona16( 16 , "Silvia Pérez (actor)" );
	persona16.agregarAsociado(7);
	res = archivoPersonas.escribir(persona16);

	EntidadSerializable persona17( 17 , "Rodrigo De la Serna (actor)" );
	persona17.agregarAsociado(7);
	persona17.agregarAsociado(12);
	res = archivoPersonas.escribir(persona17);

	EntidadSerializable persona18( 18 , "Mike Amigorena (actor)" );
	persona18.agregarAsociado(7);
	res = archivoPersonas.escribir(persona18);

	EntidadSerializable persona19( 19 , "Juan José Campanella (director)" );
	persona19.agregarAsociado(12);
	res = archivoPersonas.escribir(persona19);

	// Imprime
	cout << endl << endl << "A continuación el archivo de personas." << endl;
	cout << left << setw(5) << "ID" << setw(20) << "Nombre" << endl;
	cout << endl;
	EntidadSerializable unaEnt;
	vector<int> unVect;
	for ( id = 1 ; id <= maxPersonas ; id++ )
	{
		unaEnt = archivoPersonas.leer(id);
		cout << left << setw(5) << unaEnt.getID() << setw(20) << unaEnt.getRotulo();

		cout << "[";
		unVect = unaEnt.getAsociados();
		for (i = 0 ; i < unVect.size() ; i++ )
		{
			cout << unVect.at(i) << " ";
		}
		cout << "]" << endl;
	}

	cout << endl << endl;

	res = archivoPersonas.cerrar();
}
